 /*******************************************************************************
  * Copyright (c) 2005, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.core.internal.propertytester;

 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.mapping.ResourceMapping;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.QualifiedName;

 /**
  * A property tester for various properties of resource mappings
  *
  * @since 3.2
  */
 public class ResourceMappingPropertyTester extends ResourcePropertyTester {
     public boolean test(Object receiver, String method, Object [] args, Object expectedValue) {
         if (!(receiver instanceof ResourceMapping))
             return false;
         if (!method.equals(PROJECT_PERSISTENT_PROPERTY))
             return false;
         //Note: we currently say the test is satisfied if any project associated
 //with the mapping satisfies the test.
 IProject[] projects = ((ResourceMapping) receiver).getProjects();
         if (projects.length == 0)
             return false;
         String propertyName;
         String expectedVal;
         if (args.length == 0) {
             propertyName = toString(expectedValue);
             expectedVal = null;//any value will do
 } else if (args.length == 1) {
             propertyName = toString(args[0]);
             expectedVal = null;//any value will do
 } else {
             propertyName = toString(args[0]);
             expectedVal = toString(args[1]);
         }
         QualifiedName key = toQualifedName(propertyName);
         boolean found = false;
         for (int i = 0; i < projects.length; i++) {
             try {
                 Object actualVal = projects[i].getPersistentProperty(key);
                 //the value is not set, so keep looking on other projects
 if (actualVal == null)
                     continue;
                 //record that we have found at least one value
 found = true;
                 //expected value of null means we expect *any* value, rather than expecting no value
 if (expectedVal == null)
                     continue;
                 //if the value we find does not match, then the property is not satisfied
 if (!expectedVal.equals(actualVal.toString()))
                     return false;
             } catch (CoreException e) {
                 // ignore
 }
         }
         //if any projects had the property set, the condition is satisfied
 return found;
     }
 }

